﻿using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCobradoresABM : Form
    {
        private frmPrincipal parent = null;
        public frmCobradoresABM()
        {
            InitializeComponent();
        }

        private void IniciarControles()
        {
            txtApellido.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            dgvCobradores.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            if (Convert.ToBoolean(parent.usuario.rol.permisos.insertar) == true)
            {
                frmCobradores frm = new frmCobradores();
                frm.MdiParent = this.MdiParent;
                frm.Show();
            }
            else
            {
                MessageBox.Show("No tiene privilegios para realizar la operación", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

        private void frmCobradoresABM_Load(object sender, EventArgs e)
        {
            IniciarControles();
            GetCobradores();

            parent = (frmPrincipal)this.MdiParent;
        }

        private void GetCobradores()
        {
            try
            {
                var query = (from row in Cobradores.FindAllConLocalidadZona()
                             where row.id != 1
                             select new
                             {
                                 Cod = String.Format("{0:000}", row.id),
                                 row.documento,
                                 Nombre = row.apellido + " " + row.nombres,
                                 Direccion = row.calle + " - " + row.numeracion + " - " + row.piso + " - " + row.departamento,
                                 row.telefonoparticular,
                                 row.telefonocelular,
                                 row.email,
                                 comision = row.comision + "%",
                                 row.activo

                             }).ToList();

                dgvCobradores.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvCobradores.Rows.Add(fila.Cod, fila.documento, fila.Nombre, fila.Direccion, fila.telefonoparticular, fila.telefonocelular, fila.email, fila.comision, fila.activo);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void frmCobradoresABM_Activated(object sender, EventArgs e)
        {
            GetCobradores();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dgvCobradores.Rows.Count > 0)
            {
                try
                {
                    if (Convert.ToBoolean(parent.usuario.rol.permisos.eliminar) == true)
                    {
                        int cobrador_id = Convert.ToInt32(dgvCobradores.CurrentRow.Cells[0].Value);
                        string cobrador = dgvCobradores.CurrentRow.Cells[2].Value.ToString();
                        string codigo = dgvCobradores.CurrentRow.Cells[0].Value.ToString();

                        DialogResult DialogEliminar = MessageBox.Show("Se va a eliminar el Cobrador: (" + codigo + " - " + cobrador + "), está seguro?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (DialogEliminar == System.Windows.Forms.DialogResult.Yes)
                        {
                            int resultado = Cobradores.Remove(cobrador_id);
                            if (resultado > 0)
                            {
                                MessageBox.Show("El registro se cambio a inactivo.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                GetCobradores();
                            }
                            else
                            {
                                MessageBox.Show("Ocurrio un error al eliminar el Cobrador. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("No tiene privilegios para realizar la operación", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (dgvCobradores.Rows.Count > 0)
            {
                try
                {
                    if (Convert.ToBoolean(parent.usuario.rol.permisos.modificar) == true)
                    {
                        int cobrador_id = Convert.ToInt32(dgvCobradores.CurrentRow.Cells[0].Value);
                        frmCobradores frm = new frmCobradores(cobrador_id, "EDITAR");
                        frm.MdiParent = this.MdiParent;
                        frm.Text = "Cobradores ABM - Modificación de Cobrador";
                        frm.Show();
                    }
                    else
                    {
                        MessageBox.Show("No tiene privilegios para realizar la operación", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
        }



        private void FiltrarDatos(string codigo, string apellido, string documento)
        {
            try
            {
                var query = (from row in Cobradores.FindAllConLocalidadZona()
                             where ((row.id == Convert.ToInt32("0" + codigo)) || (codigo.Equals(string.Empty))) &&
                             ((row.apellido.Contains(apellido)) || (apellido.Equals(string.Empty))) &&
                             ((row.documento.Contains(documento)) || (documento.Equals(string.Empty))) &&
                             (row.id != 1)

                             select new
                             {
                                 Cod = String.Format("{0:000}", row.id),
                                 row.documento,
                                 Nombre = row.apellido + " " + row.nombres,
                                 Direccion = row.calle + " - " + row.numeracion + " - " + row.piso + " - " + row.departamento,
                                 row.telefonoparticular,
                                 row.telefonocelular,
                                 row.email,
                                 comision = row.comision + "%",
                                 row.activo

                             }).ToList();

                dgvCobradores.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvCobradores.Rows.Add(fila.Cod, fila.documento, fila.Nombre, fila.Direccion, fila.telefonoparticular, fila.telefonocelular, fila.email, fila.comision, fila.activo);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            FiltrarDatos(txtCodigo.Text, txtApellido.Text, txtDocumento.Text);
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Documento.");
                e.Handled = true;
                return;
            }
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtCodigo, "Solo se permiten números en el campo Código.");
                e.Handled = true;
                return;
            }
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {
            FiltrarDatos(txtCodigo.Text, txtApellido.Text, txtDocumento.Text);
        }

        private void txtApellido_TextChanged(object sender, EventArgs e)
        {
            FiltrarDatos(txtCodigo.Text, txtApellido.Text, txtDocumento.Text);
        }

        private void txtDocumento_TextChanged(object sender, EventArgs e)
        {
            FiltrarDatos(txtCodigo.Text, txtApellido.Text, txtDocumento.Text);
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {

        }
    }
}
